home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PET / S-Super PET / (s)tk.d64 / ADUMP.ASM < prev    next >
Assembly Source File  |  2009-01-18  |  6KB  |  124 lines

  1. ;mainline routine adump ~ dumps all contents of file to printer
  2. ;this dump loads in Bank 15, and is loaded from main menu. Written by Reg Beck;
  3. ;modified by D.B. to output to all printers and for extra LF if wanted
  4.  
  5. xref initstd_,openf_,fgetchar_,fputchar_,eof_,closef_,tbreak_,putnl_
  6. xref display, delay, read16, printf_, fputnl_
  7. service_ equ $32
  8. kyputb_  equ $dd82
  9.  
  10.         jsr initstd_            ;initialize standard I/O
  11.         jsr putnl_              ;move cursor down one line
  12.         ;***modified code for extra linefeed
  13.         ldd #extralf            ;do we want an extra linefeed for printer?
  14.         jsr printf_
  15.         loop                    ;stay in this loop until a yes/no answer
  16.           jsr kyputb_           ;is given
  17.           cmpb #'y
  18.           if eq                 ;if it's yes, set control 'linefd' to zero
  19.             clr linefd
  20.             jmp outt
  21.           endif
  22.           cmpb #'n              ;otherwise, quit
  23.           quif eq
  24.         endloop
  25.         ;***modified code for printer type
  26. outt    ldd #which              ;prompt for printer type
  27.         jsr printf_
  28.         loop                    ;stay in loop until you get a valid
  29.           jsr kyputb_           ;printer response
  30.           cmpb #'p              ;this loop stuck in by D.B. to handle
  31.           if eq                 ;all printer types
  32.             ldd #$b129          ;address of 'printer' in ROM
  33.             jmp gotit
  34.           endif
  35.           cmpb  #'i
  36.           if eq
  37.             ldd #ieee           ;address of 'ieee4' in this program
  38.             jmp gotit
  39.           endif
  40.           cmpb  #'s
  41.           if eq
  42.             ldd #$b144          ;address of 'serial' in ROM
  43.             jmp gotit
  44.           endif
  45.         endloop
  46. gotit   std outfile             ;end mod code**
  47.         ldx #prompt             ;load prompt message
  48.         jsr display             ;display prompt
  49.         jsr putnl_              ;move cursor down one line
  50.         ldx #infile             ;load address of input file name buffer
  51.         jsr read16              ;read in input file name
  52.         ldx #mode1              ;load address of input file mode
  53.         pshs x                  ;push file mode onto stack
  54.         ldd #infile             ;load address of input file name
  55.         jsr openf_              ;open input file
  56.         std inptr               ;store input file control block address
  57.         puls x                  ;clean up stack
  58.         if ne                   ;if file opened then continue
  59.            ldx #mode2           ;   load address of output file mode
  60.            pshs x               ;   push onto stack
  61.            ldd outfile          ;   load address of output file name
  62.            jsr openf_           ;   open output file
  63.            std outptr           ;   store output file control block address
  64.            puls x               ;   clean up stack
  65.            loop                 ;   loop
  66.               ldd inptr         ;      load input file control block
  67.               jsr fgetchar_     ;      get character from file
  68.               pshs d            ;      push character on stack
  69.               cmpb #$d          ;      is it a carriage return?
  70.               if eq             ;      if so,
  71.                 tst linefd      ;        do we want an extra linefeed?
  72.                 bne skip        ;        if we don't, forget it.
  73.                 ldd outptr      ;        otherwise, give one
  74.                 jsr fputnl_
  75.               endif
  76. skip          jsr delay         ;      let I/O bus settle
  77.               ldd outptr        ;      load output file control block
  78.               jsr fputchar_     ;      send character to printer
  79.               puls d            ;      clean up stack
  80.               ldd inptr         ;      load input file control block
  81.               jsr eof_          ;      check for end of file
  82.            until ne             ;   quit if end of file
  83.            ldd outptr           ;   load output file control block
  84.            jsr closef_          ;   close output file
  85.            ldd inptr            ;   load input file control block
  86.            jsr closef_          ;   close input file
  87.         else                    ;else
  88.             ldx #errmsg1        ;    load address of error message 1
  89.             jsr display         ;    display error message 1
  90.             jsr putnl_          ;    line feed and carriage return
  91.             ldx #errmsg2        ;    load address of error message 2
  92.             jsr display         ;    display error message 2
  93.             jsr putnl_          ;    line feed and carriage return
  94.             loop                ;    loop
  95.                jsr tbreak_      ;       has stop key been pressed?
  96.             until ne            ;    quit if yes
  97.         endif                   ;endif
  98.         clr service_            ;clear service_ (to return to menu)
  99.         rts                     ;return 6809 menu
  100.  
  101. linefd  fcb 1
  102. outfile rmb 2                   ;storage for printer type
  103. ieee    fcc "ieee4"             ;mod by D.B. for use with all printers.
  104.         fcb 0
  105. mode1   fcc "r"
  106.         fcb 0
  107. mode2   fcc "w"
  108.         fcb 0
  109. inptr   rmb 2
  110. outptr  rmb 2
  111. bufend  rmb 2
  112. infile  rmb 17
  113. errmsg1 fcc "open disk error"
  114.         fcb 0
  115. errmsg2 fcc "press stop key to return to menu"
  116.         fcb 0
  117. prompt  fcc "enter file name--maximum of 16 characters"
  118.         fcb 0
  119. extralf fcc "%nneed an extra linefeed for your printer? y or n:%n%n"
  120.         fcb 0
  121. which   fcc "enter 'i' for ieee4, 's' for serial, or 'p' for printer%n%n"
  122.         fcb 0            ;mod by D.B. for use with all printers.
  123.         end
  124.